home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / catlog / source / main.c < prev    next >
C/C++ Source or Header  |  1993-07-08  |  32KB  |  1,182 lines

  1. /*
  2.     NIFTYのLOG整理                main.c
  3.                     by GHH01217 山先
  4.     $Header: MAIN.Cv  1.2  93/02/12 22:44:54  山先  Exp $
  5. */
  6.  
  7. #define    MAIN    1
  8. #include    "log.h"
  9. #include    <time.h>
  10.  
  11. #define    TEST
  12. #undef    TEST
  13.  
  14. static    int        set_option_sw = NO;
  15.  
  16. static    void    print_now_time_sub( int time , char *str0 )
  17. {
  18.     char    str1[ 20 ] , str2[ 20 ];
  19.  
  20.     sprintf(str1,"%2d",time);
  21.     to_shift_zen_s(str1,str2);    strcat(str,str2);    strcat(str,str0);
  22. }
  23.  
  24. void    print_now_time()
  25. {
  26.     struct    tm        *timeptr;
  27.             time_t    secsnow;
  28.  
  29.     /********************************/
  30.     /* 現在の日付をシステムから知る */
  31.     /********************************/
  32.     time( &secsnow );                    /* 現在の時刻 */
  33.     timeptr = localtime( &secsnow );    /* 構造体に変換 */
  34.     strcpy( str , "\n現在の時刻は19" );
  35.     print_now_time_sub( timeptr->tm_year    , "年" );
  36.     print_now_time_sub( timeptr->tm_mon + 1 , "月" );
  37.     print_now_time_sub( timeptr->tm_mday    , "日 " );
  38.     print_now_time_sub( timeptr->tm_hour    , "時" );
  39.     print_now_time_sub( timeptr->tm_min     , "分" );
  40.     print_now_time_sub( timeptr->tm_sec     ,"秒です。");
  41.     printf("%s",str);
  42. }
  43.  
  44. #ifdef    TEST
  45. static    void    ms( char *mes , char *d )
  46. {
  47.     printf("変数<%s>は <%s> です。\n" , mes , d );
  48. }
  49.  
  50. static    void    md( char *mes , int d )
  51. {
  52.     printf("変数<%s>は %d です。\n" , mes , d );
  53. }
  54.  
  55. static    void    mi( char *mes , int d )
  56. {
  57.     printf("スイッチ<%s>は " , mes );
  58.     if ( d == YES ) { printf("YES"); } else { printf("NO"); };
  59.     printf(" です。\n");
  60. }
  61.  
  62. static    void    main_loop_sub()
  63. {
  64.     mi( "error" , error );
  65.     md( "max_catlog" , max_catlog );
  66.  
  67.     mi( "mess_sw" , mess_sw );
  68.     mi( "quiet_sw" , quiet_sw );
  69.     mi( "no_dir_sw" , no_dir_sw );
  70.     mi( "no_partition_line_sw" , no_partition_line_sw );
  71.     mi( "make_new_file_001_sw" , make_new_file_001_sw );
  72.     mi( "delete_old_file_sw" , delete_old_file_sw );
  73.     mi( "search_all_file_sw" , search_all_file_sw );
  74.     mi( "display_log_file_sw" , display_log_file_sw );
  75.     mi( "Del_forum_name_line_sw" , Del_forum_name_line_sw );
  76.     mi( "collect_1_ID_sw" , collect_1_ID_sw );
  77.     mi( "No_Time_Stamp_file" , No_Time_Stamp_file );
  78.     mi( "Extract_LZH_file_sw" , Extract_LZH_file_sw );
  79.  
  80.     get_yesno();
  81.  
  82.     mi( "Print_Del_Mes_Hyoudai" , Print_Del_Mes_Hyoudai );
  83.     mi( "Update_LZH_file_sw" , Update_LZH_file_sw );
  84.     mi( "Re_sort_log_sw" , Re_sort_log_sw );
  85.     mi( "Break_catlog_sw" , Break_catlog_sw );
  86.     mi( "Do_stage_1_sw" , Do_stage_1_sw );
  87.     mi( "Do_stage_2_sw" , Do_stage_2_sw );
  88.     mi( "Do_stage_3_sw" , Do_stage_3_sw );
  89.  
  90.     md( "touroku_su" , touroku_su );
  91.     md( "hatugen_su" , hatugen_su );
  92.     md( "max_mojisu" , max_mojisu );
  93.  
  94.     ms( "collect_1_ID" , collect_1_ID );
  95.     ms( "output_path" , output_path );
  96.     ms( "input_path" , input_path );
  97.     ms( "tmp_path" , tmp_path );
  98.     ms( "search_file_name" , search_file_name );
  99. }
  100. #endif    /* TEST */
  101.  
  102. void    main_loop( )
  103. {
  104. #ifdef    TEST
  105.     printf("次の設定でCATLOGを実行します。\n");
  106.     main_loop_sub();
  107.     get_yesno();
  108. #endif
  109.  
  110.     print_now_time();
  111.  
  112.     /****************************************************/
  113.     /* IDX_FILE_NAME がない場合は、新しい形式に変更する */
  114.     /****************************************************/
  115.     check_index_mode();                /* makeidx.c */
  116.     check_MakeUpMAIL_mode();        /* sortlog.c */
  117.  
  118.     if ( Re_sort_log_sw == YES ) {
  119.         sortlog_main();                print_now_time();
  120.         Re_sort_log_sw = NO;
  121.         return;
  122.     };
  123.  
  124.     if ( SearchSayStartDateSw == YES && SearchSayEndDateSw == YES ) {
  125.         if ( strcmp( SearchSayStartDate , SearchSayEndDate ) > 0 ) {
  126.             strcpy( str , "検索する発言の年月日の指定に誤りがあります。"
  127.                             "指定し直して下さい。"
  128.             );
  129.             error_return( str );    return;
  130.         };
  131.     };
  132.  
  133.     if ( set_option_sw != YES ) {
  134.         printf("\nオプションスイッチの指定が充分ではありません。"
  135.                 "\n再度設定のし直しをして下さい。"
  136.         );
  137.         exit( 1 );
  138.     };
  139.  
  140.     /******************************************************************/
  141.     /* 出力ディレクトリが指定されていない場合は入力ディレクトリとする */
  142.     /******************************************************************/
  143.     if ( *output_path == '\0' ) {
  144.         printf("\n\n出力ディレクトリが設定されていません。"
  145.                 "\n入力ディレクトリと同じ(%s)にします。いいですか?",
  146.                 input_path[ 0 ]
  147.         );
  148.         if ( get_yesno_mes() == YES ) {
  149.             strcpy( output_path , input_path[0] );
  150.         } else {
  151.             printf("\nカレントディレクトリに出力します。いいですか?");
  152.             if ( get_yesno_mes() == NO ) {
  153.                 printf("\n処理を中断します。");
  154.                 exit( 1 );
  155.             };
  156.         };
  157.     };
  158.  
  159.     if ( Do_stage_1_sw == YES && collect_main() == 0 ) {
  160.         print_now_time();    return;    /* 発言数が 0 */
  161.     };
  162.  
  163.     if ( Do_stage_2_sw == YES )        divide_main();
  164.  
  165.     if ( Break_catlog_sw == YES ) {
  166.         print_now_time();    return;
  167.     };
  168.  
  169.     if ( Do_stage_3_sw == YES )    catlog_main();
  170.  
  171.     print_now_time();
  172. }
  173.  
  174. static    void    append_dir( char *path )
  175. {
  176.     int        l;
  177.  
  178.     if ( ( l = strlen( path ) ) < 1 ) return;
  179.     if ( path[ l - 1 ] != '\\' ) strcat( path , "\\" );
  180.     while( *path ) *path++ = toupper( *path );
  181. }
  182.  
  183. struct    Command {
  184.         char    *mes;                /* 画面表示文字列 */
  185.         char    *sw_name;            /* CATLOG.DEF内のスイッチの綴り */
  186.         void    (*func)( int sw );    /* 関数へのポインタ なければNULL */
  187. };
  188.  
  189. static    void    DisplaySwSet( int sw ){
  190.     if ( sw == TRUE ) {
  191.         mess_sw = YES;    quiet_sw = NO;    display_log_file_sw = YES;
  192.     } else {
  193.         mess_sw = YES;    quiet_sw = NO;    display_log_file_sw = NO;
  194.     };
  195. }
  196.  
  197. static    void    SilenceSwSet( int sw )
  198. {
  199.     if ( sw == TRUE ) {        mess_sw = NO;
  200.     } else {                mess_sw = YES;
  201.     };
  202. };
  203.  
  204. static    void    ShutUpSwSet( int sw )
  205. {
  206.     if ( sw == TRUE ) {        mess_sw = NO;    quiet_sw = YES;
  207.     } else {                mess_sw = YES;    quiet_sw = NO;
  208.     };
  209. };
  210.  
  211. static    void    NoDirSwSet( int sw )
  212. {
  213.     if ( sw == TRUE ) {    no_dir_sw = YES;
  214.     } else {            no_dir_sw = NO;
  215.     };
  216. };
  217.  
  218. static    void    NewFile001SwSet( int sw )
  219. {
  220.     if ( sw == TRUE ) {    make_new_file_001_sw = YES;
  221.     } else {            make_new_file_001_sw = NO;
  222.     };
  223. };
  224.  
  225. static    void    NewFilex01SwSet( int sw )
  226. {
  227.     if ( sw == TRUE ) {    make_new_file_x01_sw = YES;
  228.     } else {            make_new_file_x01_sw = NO;
  229.     };
  230. };
  231.  
  232. static    void    NewFilesmallSwSet( int sw )
  233. {
  234.     if ( sw == TRUE ) {    make_new_file_small_sw = YES;
  235.     } else {            make_new_file_small_sw = NO;
  236.     };
  237. };
  238.  
  239. static    void    PartitionSwSet( int sw )
  240. {
  241.     if ( sw == TRUE ) {    no_partition_line_sw = YES;
  242.     } else {            no_partition_line_sw = NO;
  243.     };
  244. };
  245.  
  246. static    void    OldFileSwSet( int sw )
  247. {
  248.     if ( sw == TRUE ) {    delete_old_file_sw = YES;
  249.     } else {            delete_old_file_sw = NO;
  250.     };
  251. };
  252.  
  253. static    void    DelFAPXResFileSwSet( int sw )    /* FAPXのRESファイルの削除 */
  254. {
  255.     if ( sw == TRUE ) {    delete_FAPX_RES_file_sw = YES;
  256.     } else {            delete_FAPX_RES_file_sw = NO;
  257.     };
  258. };
  259.  
  260. static    void    SearchAllFileSwSet( int sw )
  261. {
  262.     if ( sw == TRUE ) {    search_all_file_sw = YES;
  263.     } else {            search_all_file_sw = NO;
  264.     };
  265. };
  266.  
  267. static    void    WithoutHPSwSet( int sw )
  268. {
  269.     if ( sw == TRUE ) {    without_HP_say_sw = YES;
  270.     } else {            without_HP_say_sw = NO;
  271.     };
  272. };
  273.  
  274. static    void    WithoutPATIOSwSet( int sw )
  275. {
  276.     if ( sw == TRUE ) {    without_PATIO_say_sw = YES;
  277.     } else {            without_PATIO_say_sw = NO;
  278.     };
  279. };
  280.  
  281. static    void    WithoutMESSwSet( int sw )
  282. {
  283.     if ( sw == TRUE ) {    without_MES_say_sw = YES;
  284.     } else {            without_MES_say_sw = NO;
  285.     };
  286. };
  287.  
  288. static    void    WithoutMAILSwSet( int sw )
  289. {
  290.     if ( sw == TRUE ) {    without_MAIL_say_sw = YES;
  291.     } else {            without_MAIL_say_sw = NO;
  292.     };
  293. };
  294.  
  295. static    void    WithoutLIBSwSet( int sw )
  296. {
  297.     if ( sw == TRUE ) {    without_LIB_say_sw = YES;
  298.     } else {            without_LIB_say_sw = NO;
  299.     };
  300. };
  301.  
  302. static    void    WithoutBILLSwSet( int sw )
  303. {
  304.     if ( sw == TRUE ) {    without_BILL_say_sw = YES;
  305.     } else {            without_BILL_say_sw = NO;
  306.     };
  307. };
  308.  
  309. static    void    ReSortLogSwSet( int sw )
  310. {
  311.     if ( sw == TRUE ) {        Re_sort_log_sw = YES;
  312.     } else {                Re_sort_log_sw = NO;
  313.     };
  314. };
  315.  
  316. static    void    BreakCatlogSwSet( int sw )
  317. {
  318.     if ( sw == TRUE ) {
  319.         Do_stage_1_sw = YES;    Do_stage_2_sw = YES;    Do_stage_3_sw = NO;
  320.         Break_catlog_sw = YES;
  321.     } else {
  322.         Do_stage_1_sw = YES;    Do_stage_2_sw = YES;    Do_stage_3_sw = YES;
  323.         Break_catlog_sw = NO;
  324.     };
  325. };
  326.  
  327. static    void    ContinueSwSet( int sw )
  328. {
  329.     if ( sw == TRUE ) {
  330.         Do_stage_1_sw = NO;    Do_stage_2_sw = NO;    Do_stage_3_sw = YES;
  331.         Break_catlog_sw = NO;    main_loop();        /* すぐ実行する */
  332.     } else {
  333.         Do_stage_1_sw = YES;    Do_stage_2_sw = YES;    Do_stage_3_sw = YES;
  334.         Break_catlog_sw = NO;
  335.     };
  336. };
  337.  
  338. static    void    ForumNameLineSwSet( int sw )
  339. {
  340.     if ( sw == TRUE ) {    Del_forum_name_line_sw = YES;
  341.     } else {            Del_forum_name_line_sw = NO;
  342.     };
  343. };
  344.  
  345. static    void    TimeStampFileSwSet( int sw )
  346. {
  347.     if ( sw == TRUE ) {    No_Time_Stamp_file = YES;
  348.     } else {            No_Time_Stamp_file = NO;
  349.     };
  350. };
  351.  
  352. static    void    QuoteAllSaySwSet( int sw )
  353. {
  354.     if ( sw == TRUE ) {    Quote_All_Say_sw = YES;
  355.     } else {            Quote_All_Say_sw = NO;
  356.     };
  357. };
  358.  
  359. static    void    SetTimeStampSwSet( int sw )
  360. {
  361.     if ( sw == TRUE ) {    No_Time_Stamp_file = NO;
  362.     } else {            No_Time_Stamp_file = YES;
  363.     };
  364. };
  365.  
  366. static    void    ExtractLZHFileSwSet( int sw )
  367. {
  368.     if ( sw == TRUE ) {    Extract_LZH_file_sw = YES;
  369.     } else {            Extract_LZH_file_sw = NO;
  370.     };
  371. };
  372.  
  373. static    void    PrintDelMesHyoudaiSwSet( int sw )
  374. {
  375.     if ( sw == TRUE ) {    Print_Del_Mes_Hyoudai = YES;
  376.     } else {            Print_Del_Mes_Hyoudai = NO;
  377.     };
  378. };
  379.  
  380. static    void    DeleteDeletedSaySwSet( int sw )    /* 削除した発言は削除する */
  381. {
  382.     if ( sw == TRUE ) {    Delete_Deleted_Say_sw = YES;
  383.     } else {            Delete_Deleted_Say_sw = NO;
  384.     };
  385. };
  386.  
  387. static    void    UpdateLZHFileSwSet( int sw )
  388. {
  389.     if ( sw == TRUE ) {    Update_LZH_file_sw = YES;
  390.     } else {            Update_LZH_file_sw = NO;
  391.     };
  392. };
  393.  
  394. static    void    DoFromStage2SwSet( int sw )
  395. {
  396.     if ( sw == TRUE ) {
  397.         Do_stage_1_sw = NO;    Do_stage_2_sw = YES;    Do_stage_3_sw = YES;
  398.         Break_catlog_sw = NO;    main_loop();        /* すぐ実行する */
  399.     } else {
  400.         Do_stage_1_sw = YES;    Do_stage_2_sw = YES;    Do_stage_3_sw = YES;
  401.         Break_catlog_sw = NO;
  402.     };
  403. };
  404.  
  405. static    void    DoFromStage3SwSet( int sw )
  406. {
  407.     if ( sw == TRUE ) {
  408.         Do_stage_1_sw = NO;    Do_stage_2_sw = NO;    Do_stage_3_sw = YES;
  409.         Break_catlog_sw = NO;    main_loop();        /* すぐ実行する */
  410.     } else {
  411.         Do_stage_1_sw = YES;    Do_stage_2_sw = YES;    Do_stage_3_sw = YES;
  412.         Break_catlog_sw = NO;
  413.     };
  414. };
  415.  
  416. static    void    DoOnlyStage1SwSet( int sw )
  417. {
  418.     if ( sw == TRUE ) {
  419.         Do_stage_1_sw = YES;    Do_stage_2_sw = NO;    Do_stage_3_sw = NO;
  420.         Break_catlog_sw = NO;
  421.     } else {
  422.         Do_stage_1_sw = YES;    Do_stage_2_sw = YES;    Do_stage_3_sw = YES;
  423.         Break_catlog_sw = NO;
  424.     };
  425. };
  426.  
  427. static    void    DoOnlyStage2SwSet( int sw )
  428. {
  429.     if ( sw == TRUE ) {
  430.         Do_stage_1_sw = NO;    Do_stage_2_sw = YES;    Do_stage_3_sw = NO;
  431.         Break_catlog_sw = NO;    main_loop();        /* すぐ実行する */
  432.     } else {
  433.         Do_stage_1_sw = YES;    Do_stage_2_sw = YES;    Do_stage_3_sw = YES;
  434.         Break_catlog_sw = NO;
  435.     };
  436. };
  437. static    void    DoOnlyStage3SwSet( int sw )
  438. {
  439.     if ( sw == TRUE ) {
  440.         Do_stage_1_sw = NO;    Do_stage_2_sw = NO;    Do_stage_3_sw = YES;
  441.         Break_catlog_sw = NO;    main_loop();        /* すぐ実行する */
  442.     } else {
  443.         Do_stage_1_sw = YES;    Do_stage_2_sw = YES;    Do_stage_3_sw = YES;
  444.         Break_catlog_sw = NO;
  445.     };
  446. };
  447.  
  448. static    void    MakeIndexFromCATLOGFile( int sw )
  449. {
  450.     if ( sw == TRUE ) {
  451.         set_option_sw = YES;
  452.         check_index_mode();                    /* makeidx.c */
  453.         check_MakeUpMAIL_mode();            /* sortlog.c */
  454.         makeidx_from_catlog_file_main();    /* makeidx.c */
  455.     };
  456. }
  457.  
  458. static    void    AnswerAllYesSwSet( int sw )
  459. {
  460.     if ( sw == TRUE ) {        answer_all_sw = YES;    answer_sw = YES;
  461.     } else {                answer_all_sw = NO;
  462.     };
  463. }
  464.  
  465. static    void    AnswerAllNoSwSet( int sw )
  466. {
  467.     if ( sw == TRUE ) {        answer_all_sw = YES;    answer_sw = NO;
  468.     } else {                answer_all_sw = NO;
  469.     };
  470. }
  471.  
  472. static    void    CancelAnswerAllSwSet( int sw )
  473. {
  474.     if ( sw == TRUE ) {        answer_all_sw = NO;
  475.     } else {                answer_all_sw = NO;
  476.     };
  477. }
  478.  
  479. static    void    ClearCollectID( int sw )
  480. {
  481.     max_collect_ID = 0;
  482. };
  483.  
  484. /************************************/
  485. /* メールは1つのファイルで処理する */
  486. /************************************/
  487. static    void    MakeUpMAILInto1FileSwSet( int sw )
  488. {
  489.     if ( sw == TRUE ) {        MakeUpMAILInto1FileSw = YES;
  490.     } else {                MakeUpMAILInto1FileSw = NO;
  491.     };
  492. }
  493.  
  494. static    struct    Command    main_command[] = {
  495.     {"ログ表示する",                "Display",            DisplaySwSet        },
  496.     {"静かに!! モードで実行",        "Silence",            SilenceSwSet        },
  497.     {"だまれ!! モードで実行",        "Shut-up",            ShutUpSwSet            },
  498.     {"サブ・ディレクトリの検索を行わない",    "No-dir",            NoDirSwSet            },
  499.     {"発言番号x01で新ファイルを作る",    "New-file-x01",        NewFilex01SwSet        },
  500.     {"発言番号001で新ファイルを作る",    "New-file-001",        NewFile001SwSet        },
  501.     {"より小さな発言番号で新ファイルを作る",
  502.             "New-file-small",        NewFilesmallSwSet                        },
  503.     {"「*****log整理」を入れない",    "No-partition",        PartitionSwSet        },
  504.     {"今日より古いファイルの削除",    "Del-old-file",        OldFileSwSet        },
  505.     {"FAPX の RES ファイルの削除",
  506.             "Del-FAPX-RES-file",        DelFAPXResFileSwSet                    },
  507.     {"全てのファイルを検索の対象に","Search-all-file",    SearchAllFileSwSet    },
  508.  
  509.     {"HPは整理しない",            "Without-HP",        WithoutHPSwSet        },
  510.     {"PATIOは整理しない",        "Without-PATIO",    WithoutPATIOSwSet    },
  511.     {"会議室は整理しない",            "Without-MES",        WithoutMESSwSet        },
  512.     {"MAILは整理しない",        "Without-MAIL",        WithoutMAILSwSet    },
  513.     {"LIBは整理しない",            "Without-LIB",        WithoutLIBSwSet        },
  514.     {"BILLは整理しない",        "Without-BILL",        WithoutBILLSwSet    },
  515.  
  516.     {"再度 sort しなおす",            "Re-sort-log",    ReSortLogSwSet        },
  517.     {"処理を途中で中断する",        "Break-catlog",    BreakCatlogSwSet    },
  518.     {"処理を続行する",                "Continue-catlog",ContinueSwSet        },
  519.     {"FFMHOB MES(xx)の行を削除する",
  520.         "Del-forum-name-line",            ForumNameLineSwSet                },
  521.     {"CATLOGで整理したファイルからインデックスを作る",
  522.         "Make-Index-from-CATLOG-File",    MakeIndexFromCATLOGFile            },
  523.     {"全ての質問にYESと答える",    "Answer-All-YES",AnswerAllYesSwSet    },
  524.     {"全ての質問にNOと答える",    "Answer-All-NO",AnswerAllNoSwSet    },
  525.     {"コンソール入力を許可する",
  526.         "Cancel-Answer-All-Sw",    CancelAnswerAllSwSet                    },
  527.     {"全部引用発言とする",        "Quote-All-Say",QuoteAllSaySwSet        },
  528.     {"CATLOG.DONファイルを作らない",
  529.         "No-Time-Stamp-file",    TimeStampFileSwSet                        },
  530.     {"CATLOG.DONファイルを作る",
  531.         "Set-Time-Stamp-file",    SetTimeStampSwSet                        },
  532.     {"*.lzhファイルを解凍する",
  533.         "Extract-LZH-file",    ExtractLZHFileSwSet                            },
  534.     {"CATLOGが削除した発言の表題を表示する",
  535.         "Print-Del-Mes-Hyoudai",    PrintDelMesHyoudaiSwSet                },
  536.     {"削除した発言は削除する",
  537.         "Delete-Deleted-Say",    DeleteDeletedSaySwSet                    },
  538.     {"ログを入力ディレクトリ毎に凍結しながら実行",
  539.         "Update-LZH-file",            UpdateLZHFileSwSet                    },
  540.     {"clear Collect-ID",    "Clear-Collect-ID",    ClearCollectID            },
  541.     {"メールは1つのファイルで処理する",
  542.         "MakeUpMAIL-Into1File",        MakeUpMAILInto1FileSwSet            },
  543.     {"第2段階から実行",    "Do-from-stage-2",    DoFromStage2SwSet        },
  544.     {"第3段階から実行",    "Do-from-stage-3",    DoFromStage3SwSet        },
  545.     {"第1段階のみ実行",    "Do-only-stage-1",    DoOnlyStage1SwSet        },
  546.     {"第2段階のみ実行",    "Do-only-stage-2",    DoOnlyStage2SwSet        },
  547.     {"第3段階のみ実行",    "Do-only-stage-3",    DoOnlyStage3SwSet        },
  548.     {"",                    "",                    CATLOG_exit                }
  549. };
  550.  
  551. struct    Op_Command {
  552.         char    *mes;            /* 画面表示文字列 */
  553.         char    *sw_name;        /* CATLOG.DEF内のスイッチの綴り */
  554.         void    (*func)( char * );    /* 関数へのポインタ */
  555. };
  556.  
  557. static    void    IndexModeSet( char *str ){    Index_mode = atoi( str );    };
  558. static    void    FAPXLOGModeSet( char *str )
  559. {
  560.     FAPX_LOG_mode = atoi( str );
  561. };
  562.  
  563. static    void    MojisuSet( char *str ){    max_mojisu = atol( str ) * 1024L;};
  564. static    void    OutputdirSet( char *str ){
  565.     strcpy( output_path , str );            append_dir( output_path );
  566. };
  567.  
  568. static    void    OutputDLListdirSet( char *str ){
  569.     strcpy( output_DL_List_path , str );    append_dir( output_DL_List_path );
  570. };
  571.  
  572. static    void
  573. OutputMESListdirSet_sub( const char *f_name , const char *f_n )
  574. {
  575.             int        done;
  576.     FILE    *fp;
  577.             char    *p;
  578.  
  579.     done  = is_catlog_file( f_name );
  580.     if ( done == 0 )        return;
  581.     if ( ( fp=fopen( f_name , "r" ) ) == NULL ) {
  582.         /* 起こり得ないエラー */
  583.         strcpy( file_name , f_name );
  584.         error_open_file( "OutputMESListdirSet_loop(read)" );
  585.     };
  586.     fgets( str , LINE , fp );
  587.     p = str;    while( *p != ' ' ) p++;        *p = '\0';
  588.     if ( done > 0 ) {                    /* フォーラムの会議室 */
  589.         fgets( str , LINE , fp );    fgets( str , LINE , fp );
  590.     };
  591.     fclose( fp );
  592.     without_crlf( str );
  593.     if ( ( fp = fopen( output_MES_List_path , "a" ) ) == NULL ) {
  594.         strcpy( file_name , output_MES_List_path );
  595.         error_open_file( "OutputMESListdirSet_loop(write)" );
  596.     };
  597.     fprintf( fp , "%s\n%s\n\n" , f_name , str );
  598.     fclose( fp );
  599. }
  600.  
  601. static    void    OutputMESListdirSet( char *str )
  602. {
  603.     set_option_sw = YES;
  604.     strcpy( output_MES_List_path , str );
  605.     catlog_findfirst_mes_sw = NO;
  606.     catlog_findfirst( output_path , OutputMESListdirSet_sub );
  607. };
  608.  
  609. static    void    TempdirSet( char *str ){
  610.         strcpy(tmp_path,str);    append_dir( tmp_path );
  611.         check_and_make_output_path( tmp_path );
  612. };
  613. /*************************/
  614. /* ','で区切って指定する */
  615. /* 終了は行末 or ';'     */
  616. /*************************/
  617. static    void    SearchfileSet( char *str0 )
  618. {
  619.     char    *p;
  620.  
  621.     while( *str0 ) {
  622.         while ( isspace( *str0 ) ) str0++;
  623.         if ( *str0 == '\0' )    break;
  624.         if ( *str0 == ',' )    {    str0++;    continue;    };
  625.         if ( *str0 == ';' )    break;
  626.         p = str;
  627.         while( *str0 ) {
  628.             if ( isspace( *str0 ) )    break;
  629.             if ( *str0 == ',' )        break;
  630.             if ( *str0 == ';' )        break;
  631.             *p++ = *str0++;
  632.         };
  633.         *p = '\0';
  634.         if ( strlen( str ) > 12 ) {
  635.             printf("S:%s はファイルの長さが長過ぎます",str);
  636.         };
  637.         p = str;
  638.         while( *p ) *p++ = toupper( *p );
  639.         if ( max_search_file_name >= MAX_SEARCH_FILE ) {
  640.             printf("\nこれ以上 S:xxxxx の指定はできません。\n" );
  641.             return;
  642.         };
  643.         strcpy( search_file_name[ max_search_file_name++ ] , str );
  644.         while ( isspace( *str0 ) ) str0++;
  645.         if ( *str0 == ',' )    str0++;
  646.         if ( *str0 == ';' )    break;
  647.     };
  648. };
  649.  
  650. static    void
  651. InputdirSet( char *str0 )
  652. {
  653.     char    *p;
  654.  
  655.     if ( *str0 == '\0' ) {
  656.         set_option_sw = NO;
  657.         max_input_path = 0;    return;
  658.     };
  659.  
  660.     while( *str0 ) {
  661.         while ( isspace( *str0 ) ) str0++;
  662.         if ( *str0 == '\0' )    break;
  663.         if ( *str0 == ',' )    {    str0++;    continue;    };
  664.         if ( *str0 == ';' )    break;
  665.         p = str;
  666.         while( *str0 ) {
  667.             if ( isspace( *str0 ) )    break;
  668.             if ( *str0 == ',' )        break;
  669.             if ( *str0 == ';' )        break;
  670.             *p++ = *str0++;
  671.         };
  672.         if ( ( str < p ) && ( *(p-1) != '\\' ) )    *p++ = '\\';
  673.         *p = '\0';
  674.         p = str;    while( *p ) *p++ = toupper( *p );
  675.         if ( max_input_path >= MAX_INPUT_PATH ) {
  676.             strcpy(str,"I:xxxxx の指定が多すぎます。");    error_return( str );
  677.         };
  678.         strcpy( input_path[ max_input_path++ ] , str );
  679.         while ( isspace( *str0 ) ) str0++;
  680.         if ( *str0 == ',' )    str0++;
  681.         if ( *str0 == ';' )    break;
  682.     };
  683.     set_option_sw = YES;
  684.     main_loop();
  685. };
  686.  
  687. static    void
  688. WithoutInputdirSet( char *str0 )
  689. {
  690.     char    *p;
  691.  
  692.     set_option_sw = NO;
  693.     if ( *str0 == '\0' ) {
  694.         max_without_input_path = 0;    return;
  695.     };
  696.  
  697.     while( *str0 ) {
  698.         while ( isspace( *str0 ) ) str0++;
  699.         if ( *str0 == '\0' )    break;
  700.         if ( *str0 == ',' )    {    str0++;    continue;    };
  701.         if ( *str0 == ';' )    break;
  702.         p = str;
  703.         while( *str0 ) {
  704.             if ( isspace( *str0 ) )    break;
  705.             if ( *str0 == ',' )        break;
  706.             if ( *str0 == ';' )        break;
  707.             *p++ = *str0++;
  708.         };
  709.         *p = '\0';
  710.         p = str;    while( *p ) *p++ = toupper( *p );
  711.         if ( max_without_input_path >= MAX_WITHOUT_INPUT_PATH ) {
  712.             strcpy(str,"Without-I:xxxxx の指定が多すぎます。");
  713.             error_return( str );
  714.         };
  715.         strcpy( without_input_path[ max_without_input_path++ ] , str );
  716.         set_option_sw = YES;
  717.         while ( isspace( *str0 ) ) str0++;
  718.         if ( *str0 == ',' )    str0++;
  719.         if ( *str0 == ';' )    break;
  720.     };
  721. };
  722.  
  723. void    CollectIDSet( char *str )
  724. {
  725.     int        i,sw;
  726.     char    id[ 24 ] , *p;
  727.  
  728.     while ( *str ) {
  729.         while ( isspace( *str ) ) str++;    /* skip space */
  730.         if ( *str == ';' )    break;            /* 指定がない */
  731.         if ( *str == '\0' )    break;            /* 指定がない */
  732.         /* 8文字コピー */
  733.         p = id;        sw = TRUE;
  734.         for ( i=0 ; i<8 ; i++ ) {
  735.             if ( ( ! isalpha( *str ) ) && ( ! isdigit( *str ) ) ) {
  736.                 sw = FALSE;        break;
  737.             };
  738.             *p++ = *str++;
  739.         };
  740.         *p = '\0';
  741.         /* 大文字にする */
  742.         p = id;        for ( i=0 ; i<8 ; i++ ) *p++ = toupper( *p );
  743.         if ( sw == FALSE || isIDname( id ) == NO ) {
  744.             printf("\n<%s>←IDの指定が間違っていますよ。",id);
  745.             printf("\n英字3文字+数字5文字で指定して下さい。");
  746.             error_end();
  747.         };
  748.         if ( max_collect_ID >= MAX_COLLECT_ID ) {
  749.             printf("\n検索するIDの数が多すぎます。<%d>以下です。\n",
  750.                 MAX_COLLECT_ID
  751.             );
  752.             error_end();
  753.         };
  754.         strcpy( collect_ID[ max_collect_ID ] , id );
  755.         max_collect_ID++;
  756.         collect_ID_sw = YES;
  757.  
  758.         /* 次の指定 */
  759.         while ( isspace( *str ) ) str++;
  760.  
  761.         if ( *str == ',' ) {    str++;        continue;        };
  762.         if ( *str!=';' && *str!='\0' ) {
  763.             /* error */
  764.             printf("<%s>←区切りの指定は','です。\n",str);
  765.             if (isalpha(*str)) continue; /* まあ、次も調べよう */
  766.         };
  767.         return;
  768.     };
  769. };
  770.  
  771. static    void    CatlogMesFileSet( char *str )
  772. {
  773.     mess_check    printf("\n");
  774.     catlog_mes_file_name_sw = YES;
  775.     strcpy( catlog_mes_file_name , str );
  776.     catlog_mes_file_open();    /* すぐオープンする 1992.9.15 */
  777. };
  778.  
  779. /* ○月△日以降の発言を集める */
  780. static    void    SearchSayStartDateSet( char *str )
  781. {
  782.     int        i,sw;
  783.  
  784.     /* YYMMDD の形式で指定 ? */
  785.     sw = TRUE;
  786.     if ( strlen( str ) != 6 ) sw = FALSE;
  787.     for ( i=0 ; i<6 ; i++ ) if ( ! isdigit( str[ i ] ) ) sw = FALSE;
  788.     if ( sw != TRUE ) {
  789.         error_return( "\nYYMMDD(年月日)の6桁の数字で指定して下さい。");
  790.         return;
  791.     };
  792.     strcpy( SearchSayStartDate , str );
  793.     SearchSayStartDateSw = YES;
  794. }
  795.  
  796. /* □月×日以前の発言を集める */
  797. static    void    SearchSayEndDateSet( char *str )
  798. {
  799.     int        i,sw;
  800.  
  801.     /* YYMMDD の形式で指定 ? */
  802.     sw = TRUE;
  803.     if ( strlen( str ) != 6 ) sw = FALSE;
  804.     for ( i=0 ; i<6 ; i++ ) if ( ! isdigit( str[ i ] ) ) sw = FALSE;
  805.     if ( sw != TRUE ) {
  806.         error_return( "\nYYMMDD(年月日)の6桁の数字で指定して下さい。");
  807.         return;
  808.     };
  809.     strcpy( SearchSayEndDate , str );
  810.     SearchSayEndDateSw = YES;
  811. }
  812.  
  813. static    void    MaxTmp0SizeSet( char *str )
  814. {
  815.     max_tmp0_size = atoi( str );
  816.     if ( max_tmp0_size <=0 ) max_tmp0_size = 10240;
  817. }
  818.  
  819. static    void    IDHandleSet( char *str )
  820. {
  821.     set_option_sw = YES;
  822.     mess_check    print_now_time();
  823.     search_id_name_main( str /* 出力ファイル名 */ );        /* search.c */
  824.     mess_check    print_now_time();
  825. }
  826.  
  827. static    void    SearchIDFromCATLOGFile( char *str )
  828. {
  829.     char    path[ 128 ];
  830.  
  831.     set_option_sw = YES;
  832.     strcpy( path , str );
  833.     append_dir( path );                                    /* main.c */
  834.     search_id_mes_main( path );                            /* search.c */
  835. }
  836.  
  837. static    void    def_file( char *filename );
  838.  
  839. static    char    *main_set_file_name( char *dst , char *src )
  840. {
  841.     int        i;
  842.     char    *p;
  843.  
  844.     p = dst;
  845.     for ( i=0 ; i<13 ; i++ ) {
  846.         if ( ! isalnum( *src ) ) {
  847.             if (    *src != '?'
  848.             &&        *src != '*'
  849.             &&        *src != '.'
  850.             &&        *src != '_'
  851.             )    break;
  852.         };
  853.         *p++ = *src++;
  854.     };
  855.     *p = '\0';
  856.     p = dst;        while ( *p ) *p++ = toupper( *p );        /* 大文字にする */
  857.     return( src );
  858. }
  859.  
  860. static    void    WithoutSearchfileSet( char *str )
  861. {
  862.     char    id[ 24 ];
  863.  
  864.     if ( *str == '\0' )        return;
  865.     while ( *str ) {
  866.         while ( isspace( *str ) ) str++;    /* skip space */
  867.         if ( *str == ';' )    break;            /* 指定がない */
  868.         if ( *str == '\0' )    break;            /* 指定がない */
  869.         str = main_set_file_name( id , str );    /* 13文字コピー */
  870.         if ( max_WithoutSearchFileName >= MAX_WITHOUT_SEARCH_FILE_NAME ) {
  871.             printf("\n除外するファイル名の指定が多すぎます。<%d>以下です。\n",
  872.                 MAX_WITHOUT_SEARCH_FILE_NAME );
  873.             error_end();
  874.         };
  875.         strcpy( WithoutSearchFileName[ max_WithoutSearchFileName ] , id );
  876.         max_WithoutSearchFileName++;
  877.  
  878.         /* 次の指定 */
  879.         while ( isspace( *str ) ) str++;
  880.  
  881.         if ( *str == ',' ) {    str++;        continue;        };
  882.         if ( *str!=';' && *str!='\0' ) {
  883.             /* error */
  884.             printf("<%s>←区切りの指定は','です。\n",str);
  885.             if (isalnum(*str)) continue; /* まあ、次も調べよう */
  886.         };
  887.         break;
  888.     };
  889. };
  890.  
  891. static    void    WithoutDelFileSwSet( char *str )
  892. {
  893.     char    id[ 24 ];
  894.  
  895.     if ( *str == '\0' )        return;
  896.     while ( *str ) {
  897.         while ( isspace( *str ) ) str++;    /* skip space */
  898.         if ( *str == ';' )    break;            /* 指定がない */
  899.         if ( *str == '\0' )    break;            /* 指定がない */
  900.         str = main_set_file_name( id , str );    /* 13文字コピー */
  901.         if ( max_WithoutDelFileName >= MAX_WITHOUT_DEL_FILE_NAME ) {
  902.             printf("\nファイル名の指定が多すぎます。<%d>以下です。\n",
  903.                 MAX_WITHOUT_DEL_FILE_NAME);
  904.             error_end();
  905.         };
  906.         strcpy( WithoutDelFileName[ max_WithoutDelFileName ] , id );
  907.         max_WithoutDelFileName++;
  908.  
  909.         /* 次の指定 */
  910.         while ( isspace( *str ) ) str++;
  911.  
  912.         if ( *str == ',' ) {    str++;        continue;        };
  913.         if ( *str!=';' && *str!='\0' ) {
  914.             /* error */
  915.             printf("<%s>←区切りの指定は','です。\n",str);
  916.             if (isalnum(*str)) continue; /* まあ、次も調べよう */
  917.         };
  918.         break;
  919.     };
  920. }
  921.  
  922. static    void    MakeUpDLInto1FileSwSet( char *str )
  923. {
  924.     mess_check    print_now_time();
  925.     MakeUpDLInto1File_main( str );        /* lib.c */
  926.     mess_check    print_now_time();
  927. }
  928.  
  929. static    struct    Op_Command main_op_command[] = {
  930.     {"CATLOGのメッセージを記録するファイル",
  931.         "CATLOG-MES-FILE:",                    CatlogMesFileSet            },
  932.     {"インデックスのモード","Index-Mode:",    IndexModeSet                },
  933.     {"FAPXのログ保存のモード","FAPX-LOG-Mode:",    FAPXLOGModeSet        },
  934.     {"1ファイルの大きさ(1Kバイト単位)","Moji:",    MojisuSet                },
  935.     {"tmp File のディレクトリ指定",        "Set-tmp:",    TempdirSet                },
  936.     {"tmp File のサイズの最大値(1Kバイト単位で指定)",
  937.             "Max-TMP0-Size:",    MaxTmp0SizeSet                            },
  938.     {"出力ドライブ:ディレクトリ",            "O:",        OutputdirSet            },
  939.     {"出力ドライブ:ディレクトリ(データライブラリー)",
  940.             "DL-O:",                OutputDLListdirSet                    },
  941.     {"データライブラリーを1つのファイルにまとめる",
  942.         "MakeUpDL-Into1File:",        MakeUpDLInto1FileSwSet                },
  943.     {"ファイルと会議室名の関係",
  944.             "MES-Name-O:",            OutputMESListdirSet                    },
  945.     {"入力ドライブ:ディレクトリ",            "I:",        InputdirSet                },
  946.     {"読み飛ばす入力ディレクトリ",    "Without-I:",    WithoutInputdirSet        },
  947.     {"検索するファイル",        "S:",        SearchfileSet                },
  948.     {"検索しないファイル",        "Without-S:",    WithoutSearchfileSet    },
  949.     {"○月△日以降の発言を集める",
  950.         "Search-Start-Day:",        SearchSayStartDateSet                },
  951.     {"×月□日以前の発言を集める",
  952.         "Search-End-Day:",            SearchSayEndDateSet                    },
  953.     {"IDの発言を集める",            "CollectId:",    CollectIDSet        },
  954.     {"IDの発言を集める",            "Collect-ID:",    CollectIDSet        },
  955.     {"1人のIDの発言を集める",    "Collect-1-ID:",CollectIDSet        },
  956.     {"整理済のファイルからIDで発言の収集を行う",
  957.         "Search-ID-I:",                SearchIDFromCATLOGFile                },
  958.     {"IDとハンドルの対応ファイルを作る",    "ID-Handle:",    IDHandleSet    },
  959.     {"CATLOG.DEFファイルを指定する",        "f:",            def_file    },
  960.     {"削除から除くファイル名",    "Without-Del-FN:",    WithoutDelFileSwSet    },
  961.     {"",                        ""                                        }
  962. };
  963.  
  964. static    void    main_mes_sub( char *str1 , char *str2 )
  965. {
  966.     strcpy( str , "  -" );    strcat( str , str1 );
  967.     strcat( str , "・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・" );
  968.     str[ 32 ] = '\0';
  969.     strcat( str , str2 );    strcat( str , "。\n" );
  970.     puts( str );
  971. }
  972.  
  973. void    main_mes()
  974. {
  975.     int        i;
  976.     char    str1[ 40 ];
  977.  
  978.     printf("catlog [-options]\n\ntype 1 options is ...\n\n");
  979.     i = 0;
  980.     while ( strlen( main_command[i].mes ) != 0 ) {
  981.         main_mes_sub( main_command[i].sw_name , main_command[i].mes );
  982.         i++;
  983.     };
  984.     printf("\ntype 2 options is ...\n\n");
  985.     i = 0;
  986.     while ( strlen( main_op_command[i].mes ) != 0 ) {
  987.         strcpy( str1 , main_op_command[i].sw_name );
  988.         strcat( str1 , "xxxxx " );
  989.         main_mes_sub( str1 , main_op_command[i].mes );
  990.         i++;
  991.     };
  992.     get_yesno();
  993.     putchar( '\n' );
  994. }
  995.  
  996. static    void    options( char *str )
  997. {
  998.     int        i , len , sw;
  999.     char    *p;
  1000.     void    (*func)( );
  1001.  
  1002.     if ( strlen( str ) == 0 ) return;
  1003.  
  1004.     i = 0;
  1005.     while ( strlen( main_command[i].mes ) != 0 ) {
  1006.         p = main_command[i].sw_name;    len = strlen( p );
  1007.         if ( strncmp( str , p , len ) == 0 ) {
  1008.             sw = TRUE;
  1009.             if ( str[ len ] == '-' )    sw = FALSE;
  1010.             func = main_command[i].func;    (*func)( sw );
  1011.             return;
  1012.         };
  1013.         i++;
  1014.     };
  1015.  
  1016.     i = 0;
  1017.     while ( strlen( main_op_command[i].mes ) != 0 ) {
  1018.         p = main_op_command[i].sw_name;
  1019.         len = strlen( p );
  1020.         if ( strncmp( str , p , len ) == 0 ) {
  1021.             p = str + len;
  1022.             func = main_op_command[i].func;        (*func)( p );
  1023.             return;
  1024.         };
  1025.         i++;
  1026.     };
  1027.  
  1028.     printf("\nError Option : <%s>\n\n",str);
  1029.     get_yesno();
  1030.  
  1031.     main_mes();        error_end( );
  1032. }
  1033.  
  1034. static    void    main_initial( )
  1035. {
  1036.     struct    tm        *timeptr;
  1037.             time_t    secsnow;
  1038.  
  1039.     error = NO;
  1040.     max_catlog = 0;
  1041.  
  1042.     mess_sw = YES;                    /* CATLOGの経過報告 */
  1043.     quiet_sw = NO;                    /* だまれ! スイッチ */
  1044.     no_dir_sw = NO;                    /* サブ・ディレクトリの検索をしない */
  1045.     no_partition_line_sw = NO;        /* 区切りの行なし */
  1046.     make_new_file_001_sw = NO;        /* 001で新ファイルを作る */
  1047.     make_new_file_small_sw = NO;    /* より小さな半減番号で新ファイルを作る */
  1048.     delete_old_file_sw = NO;        /* 今日より古いファイルの消去 */
  1049.     search_all_file_sw = NO;        /* 全ファイルの検索をしない */
  1050.     display_log_file_sw = NO;        /* ログ表示する */
  1051.     Re_sort_log_sw = NO;
  1052.     Break_catlog_sw = NO;
  1053.     Del_forum_name_line_sw = NO;    /* - FFMHOB の行を削除する */
  1054.     collect_ID_sw = NO;                /* IDの発言を集める */
  1055.     max_collect_ID = 0;                /* IDの数 */
  1056.     No_Time_Stamp_file = NO;        /* CATLOGDT.TMPを作らない */
  1057.     Extract_LZH_file_sw = NO;        /* *.lzhを解凍しながら実行 */
  1058.     Print_Del_Mes_Hyoudai = NO;        /* 削除した発言の表題を表示する */
  1059.     Update_LZH_file_sw = NO;        /* ログを凍結しながら実行 */
  1060.  
  1061.     Quote_All_Say_sw = NO;
  1062.     Delete_Deleted_Say_sw = NO;
  1063.     catlog_mes_file_name_sw = NO;
  1064.  
  1065.     touroku_su = hatugen_su = 0;
  1066.     max_mojisu = MAX_MOJISU_0;        /* 初期値800Kバイト */
  1067.  
  1068.     max_search_file_name = max_input_path = 0;
  1069.  
  1070.     catlog_mes_file_name[ 0 ] = output_DL_List_path[ 0 ] =
  1071.     output_path[0] = input_path[0][0] = tmp_path[0] = '\0';    /* clear */
  1072.  
  1073.     /********************************/
  1074.     /* 今日の日付をシステムから知る */
  1075.     /********************************/
  1076.     time( &secsnow );            /* 現在の時刻 */
  1077.     timeptr = localtime( &secsnow );    /* 構造体に変換 */
  1078.     sprintf( today , "%2d%2d%2d00" ,
  1079.             timeptr->tm_year,
  1080.             timeptr->tm_mon + 1,    /* 月は 1 小さい */
  1081.             timeptr->tm_mday
  1082.     );
  1083.     file_name_space_0( today );        /* file.c */
  1084. }
  1085.  
  1086. static    void    def_file( char *filename )
  1087. {
  1088.     int    c;
  1089.     FILE    *fpi;
  1090.     char    command[ LINE ];
  1091.  
  1092.     printf("<%s>で処理を行います。\n",filename);
  1093.  
  1094.     if ( (fpi=fopen( filename , "r" )) == NULL ) {
  1095.         printf("%s が見つかりません。",filename);
  1096.         get_yesno();
  1097.         return;
  1098.     };
  1099.  
  1100.     forever {
  1101.         c = fscanf( fpi , "%s" , command );
  1102.         if ( c < 1 || c == EOF ) break;
  1103.         mess_check {
  1104.             if ( *command != ';' ) printf("\nCATLOG.DEF = <%s>" , command );
  1105.         };
  1106.         switch ( *command ) {
  1107.             case '@':    /* def file の入れ子を認める */
  1108.                     def_file( command + 1 );            break;
  1109.             case '-':
  1110.                     strcpy( file_name , filename );
  1111.                     options( command + 1 );                break;
  1112.             case ';':    do {
  1113.                         c = fgetc(fpi);
  1114.                     } while ( c != '\n' && c != EOF );    break;
  1115.             default:
  1116.                     printf("\nError Option : <%s>\n\n" , command );
  1117.                     main_mes();        error_end( );        break;
  1118.         };
  1119.     };
  1120.     fclose( fpi );
  1121. }
  1122.  
  1123. void    main( int argc , char *argv[] )
  1124. {
  1125.     FILE    *fpi;
  1126.     char    path_name[128],*p0,*p1;
  1127.  
  1128.     display_main();
  1129.  
  1130.     main_initial( );
  1131.  
  1132.     if ( argc > 1 ) {
  1133.         /* オプションが指定されている時は、それだけを実行する */
  1134.         while ( --argc ) {
  1135.             argv++;
  1136.             if ( **argv == '-' )        options( *argv + 1 );
  1137.         };
  1138.         exit( 0 );
  1139.     };
  1140.  
  1141.     /* 起動ドライブを知る */
  1142.     strcpy( path_name , argv[0] );
  1143.     p0 = p1 = path_name;
  1144.     while ( *p1 ) {        if ( *p1 == '\\' ) p0 = p1;
  1145.                 p1++;
  1146.     };
  1147.     *p0 = '\0';
  1148.  
  1149.     /***************************************************/
  1150.     /* ここで起動ディレクトリを探して CATLOG.DEF を入力する */
  1151.     /***************************************************/
  1152.     /* 先ず、カレント・ディレクトリから CATLOG.DEF を探す */
  1153.     strcpy( file_name , "CATLOG.DEF" );
  1154.     if ( ( fpi = fopen( file_name , "r" ) ) != NULL ) {
  1155.             fclose( fpi );
  1156.             def_file( file_name );
  1157.     } else {
  1158.         strcpy( file_name , path_name );
  1159.         strcat( file_name , "\\" );
  1160.         strcat( file_name , "CATLOG.DEF" );
  1161.         if ( (fpi=fopen( file_name , "r" )) != NULL ) {
  1162.             fclose( fpi );
  1163.             def_file( file_name );
  1164.         } else {
  1165.             printf(    "\nCATLOG.DEFが見つかりません。"
  1166.                     "\n\nCATLOG.EXPと同じディレクトリに置き、"
  1167.                     "\n\tアイコンの登録の際、"
  1168.                     "ディレクトリ移動有りに設定して下さい。"
  1169.             );
  1170.             error_end();
  1171.         };
  1172.     };
  1173.  
  1174.     if ( set_option_sw != YES ) {
  1175.         printf(    "\nCATLOG.DEFの設定が充分ではありません。"
  1176.         );
  1177.         exit( 1 );
  1178.     };
  1179.     exit( 0 );
  1180. }
  1181.  
  1182.